#define  _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;

//int main()
//{
//	/*string s("Hello world");
//	size_t pos = s.find('o');
//	cout << 4 << "==" << pos << endl;
//	string s1("Hello world");
//	string s2=s1.substr(pos,1);
//	cout << s << "==" << s2<< endl;*/
//
//	/*string s("https://cn.bing.com/search");
//	size_t start = s.find(':');
//	start += 3;
//	size_t end = s.find('/', start);
//	string s1 = s.substr(start, end - start);
//	cout << s << endl;
//	cout << s1 << endl;*/
//
//	/*string s("https://cn.bing.com/search");
//	size_t pos = s.find_first_of("bing");
//	while (pos != string::npos)
//	{
//		s[pos] = '*';
//		pos = s.find_first_of("bing", pos + 1);
//	}
//	cout << s << endl;*/
//
//	return 0;
//}

//class Solution {
//public:
//    int lengthOfLastWord(string s) {
//        int m = 1;
//        while (1)
//        {
//            if (s[s.size() - m] == ' ')s[s.size() - m] = '*';
//            else
//                break;
//            m++;
//        }
//        size_t start = s.find_last_of(' ');
//        int n = 0;
//        size_t end = s.size();
//        return end - start - m;
//
//
//    }
//};

//int main()
//{
//	int n = 0;
//	int m = 0;
//	cin >> n; cin >> m;
//	cout << n << ' ' << m << endl;
//	cout << n / m << endl;
//	return 0;
//}

//class Solution {
//public:
//    string addStrings(string num1, string num2) {
//        size_t end1 = num1.size() - 1;
//        size_t end2 = num2.size() - 1;
//        int val1 = 0;
//        int val2 = 0;
//        int next = 0;
//        int serve = 0;
//        string newstr;
//        newstr.reserve(num1.size() > num2.size() ? num1.size() + 1 : num2.size() + 1);
//        while (end1 >= 0 || end2 >= 0)
//        {
//            if (end1 >= 0)
//                val1 = num1[end1] - '0';
//            else
//                val1 = 0;
//
//            if (end2 >= 0)
//                val2 = num2[end2] - '0';
//            else
//                val2 = 0;
//
//            serve = val1 + val2 + next;
//            next = serve / 10;
//            serve = serve % 10;
//            newstr += serve + '0';
//        }
//        if (next == 1)serve += '1';
//        reverse(newstr.begin(), newstr.end());
//        return newstr;
//
//    }
//};

class Solution {
public:
    string addStrings(string num1, string num2) {
        size_t end1 = num1.size() - 1;
        size_t end2 = num2.size() - 1;
        int next = 0;
        string newstr;
        //newstr.reserve(num1.size()>num2.size()?num1.size()+1:num2.size()+1);
        while (end1 > -1 || end2 > -1)
        {
            int val1 = end1 >= 0 ? num1[end1] + '0' : 0;
            int val2 = end2 >= 0 ? num2[end2] + '0' : 0;
            int serve = val1 + val2 + next;
            next = serve / 10;
            serve = serve % 10;
            newstr += (serve + '0');
            --end1;
            --end2;
        }
        if (next == 1)newstr += '1';
        reverse(newstr.begin(), newstr.end());
        return newstr;

    }
};

int main()
{
    Solution A;
    string num1("11");
    string num2("123");
    A.addStrings(num1, num2);
    return 0;
}